home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Przegladarki internetowe / Mozilla Seamonkey 1.0.5 pl / seamonkey-1.0.5.pl-PL.win32.installer.exe / MAIL.XPI / bin / chrome / messenger.jar / content / messenger / am-copies.js < prev    next >
Encoding:
JavaScript  |  2004-11-10  |  15.2 KB  |  428 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is Mozilla Communicator client code, released
  16.  * March 31, 1998.
  17.  *
  18.  * The Initial Developer of the Original Code is
  19.  * Netscape Communications Corporation.
  20.  * Portions created by the Initial Developer are Copyright (C) 1998-1999
  21.  * the Initial Developer. All Rights Reserved.
  22.  *
  23.  * Contributor(s):
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  27.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the MPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the MPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
  40. var gFccRadioElemChoice, gDraftsRadioElemChoice, gTmplRadioElemChoice;
  41. var gFccRadioElemChoiceLocked, gDraftsRadioElemChoiceLocked, gTmplRadioElemChoiceLocked;
  42. var gDefaultPickerMode = "1";
  43.  
  44. var gFccFolderWithDelim, gDraftsFolderWithDelim, gTemplatesFolderWithDelim;
  45.  
  46. var gPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  47.  
  48. // Picker IDs
  49. var fccAccountPickerId = "msgFccAccountPicker";
  50. var fccFolderPickerId = "msgFccFolderPicker";
  51. var draftsAccountPickerId = "msgDraftsAccountPicker";
  52. var draftsFolderPickerId = "msgDraftsFolderPicker";
  53. var tmplAccountPickerId = "msgStationeryAccountPicker";
  54. var tmplFolderPickerId = "msgStationeryFolderPicker";
  55.  
  56. /* 
  57.  * Set the global radio element choices and initialize folder/account pickers. 
  58.  * Also, initialize other UI elements (bcc self, fcc picker controller checkboxes). 
  59.  */
  60. function onInit() 
  61. {
  62.     onInitCopiesAndFolders();
  63. }
  64.  
  65. function onInitCopiesAndFolders()
  66. {
  67.     SetGlobalRadioElemChoices();
  68.                      
  69.     SetFolderDisplay(gFccRadioElemChoice, gFccRadioElemChoiceLocked, 
  70.                      "fcc", 
  71.                      fccAccountPickerId, 
  72.                      "identity.fccFolder", 
  73.                      fccFolderPickerId);
  74.  
  75.     SetFolderDisplay(gDraftsRadioElemChoice, gDraftsRadioElemChoiceLocked, 
  76.                      "draft", 
  77.                      draftsAccountPickerId, 
  78.                      "identity.draftFolder", 
  79.                      draftsFolderPickerId);
  80.  
  81.     SetFolderDisplay(gTmplRadioElemChoice, gTmplRadioElemChoiceLocked, 
  82.                      "tmpl", 
  83.                      tmplAccountPickerId, 
  84.                      "identity.stationeryFolder", 
  85.                      tmplFolderPickerId);
  86.     
  87.     setupBccTextbox();
  88.     setupFccItems();
  89.  
  90.     SetSpecialFolderNamesWithDelims();
  91. }
  92.  
  93. // Initialize the picker mode choices (account/folder picker) into global vars
  94. function SetGlobalRadioElemChoices()
  95. {
  96.     var pickerModeElement = document.getElementById("identity.fccFolderPickerMode");
  97.     gFccRadioElemChoice = pickerModeElement.getAttribute("value");
  98.     gFccRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  99.     if (!gFccRadioElemChoice) gFccRadioElemChoice = gDefaultPickerMode;
  100.  
  101.     pickerModeElement = document.getElementById("identity.draftsFolderPickerMode");
  102.     gDraftsRadioElemChoice = pickerModeElement.getAttribute("value");
  103.     gDraftsRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  104.     if (!gDraftsRadioElemChoice) gDraftsRadioElemChoice = gDefaultPickerMode;
  105.  
  106.     pickerModeElement = document.getElementById("identity.tmplFolderPickerMode");
  107.     gTmplRadioElemChoice = pickerModeElement.getAttribute("value");
  108.     gTmplRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  109.     if (!gTmplRadioElemChoice) gTmplRadioElemChoice = gDefaultPickerMode;
  110. }
  111.  
  112. // Get Current Server ID selected in the account tree
  113. function GetCurrentServerId()
  114. {
  115.     var tree = window.parent.accounttree;
  116.     var result = getServerIdAndPageIdFromTree(tree);
  117.     return result.serverId;
  118. }
  119.  
  120. /* 
  121.  * Set Account and Folder elements based on the values read from 
  122.  * preferences file. Default picker mode, if none specified at this stage, is
  123.  * set to 1 i.e., Other picker displaying the folder value read from the 
  124.  * preferences file.
  125.  */
  126. function SetFolderDisplay(pickerMode, disableMode,
  127.                           radioElemPrefix, 
  128.                           accountPickerId, 
  129.                           folderPickedField, 
  130.                           folderPickerId)
  131. {
  132.     if (!pickerMode)
  133.         pickerMode = gDefaultPickerMode;
  134.  
  135.     var selectAccountRadioId = radioElemPrefix + "_selectAccount";
  136.     var selectAccountRadioElem = document.getElementById(selectAccountRadioId);
  137.     var selectFolderRadioId = radioElemPrefix + "_selectFolder";
  138.     var selectFolderRadioElem = document.getElementById(selectFolderRadioId);
  139.     var accountPicker = document.getElementById(accountPickerId);
  140.     var folderPicker = document.getElementById(folderPickerId);
  141.     var rg = selectAccountRadioElem.radioGroup;
  142.     var folderPickedElement = document.getElementById(folderPickedField);
  143.     var uri = folderPickedElement.getAttribute("value");
  144.     // Get message folder from the given uri. Second argument (false) siginifies
  145.     // that there is no need to check for the existence of special folders as 
  146.     // these folders are created on demand at runtime in case of imap accounts.
  147.     // For POP3 accounts, special folders are created at the account creation time.
  148.     var msgFolder = GetMsgFolderFromUri(uri, false);
  149.     SetFolderPicker(msgFolder.server.serverURI, accountPickerId);
  150.     InitFolderDisplay(folderPickedField, folderPickerId);
  151.  
  152.     switch (pickerMode) 
  153.     {
  154.         case "0" :
  155.             rg.selectedItem = selectAccountRadioElem;
  156.             SetPickerEnabling(accountPickerId, folderPickerId);
  157.             break;
  158.  
  159.         case "1"  :
  160.             rg.selectedItem = selectFolderRadioElem;
  161.             SetPickerEnabling(folderPickerId, accountPickerId);
  162.             break;
  163.  
  164.         default :
  165.             dump("Error in setting initial folder display on pickers\n");
  166.             break;
  167.     }
  168.  
  169.     // Check to see if we need to lock page elements. Disable radio buttons
  170.     // and account/folder pickers when locked.
  171.     if (disableMode) {
  172.       selectAccountRadioElem.setAttribute("disabled","true");
  173.       selectFolderRadioElem.setAttribute("disabled","true");
  174.       accountPicker.setAttribute("disabled","true");
  175.       folderPicker.setAttribute("disabled","true");
  176.     }
  177. }
  178.  
  179. // Initialize the folder display based on prefs values
  180. function InitFolderDisplay(fieldname, pickerId) {
  181.     var formElement = document.getElementById(fieldname);
  182.     var uri = formElement.getAttribute("value");
  183.     SetFolderPicker(uri,pickerId);
  184. }
  185.  
  186. // Capture any menulist changes
  187. function noteSelectionChange(radioItemId)
  188. {
  189.     var checkedElem = document.getElementById(radioItemId);
  190.     var modeValue  = checkedElem.getAttribute("value");
  191.     var radioGroup = checkedElem.radioGroup.getAttribute("id");
  192.     switch (radioGroup)
  193.     {
  194.         case "doFcc" :
  195.             gFccRadioElemChoice = modeValue;
  196.             break;
  197.     
  198.         case "messageDrafts" :
  199.             gDraftsRadioElemChoice = modeValue;
  200.             break;
  201.  
  202.         case "messageTemplates" :
  203.             gTmplRadioElemChoice = modeValue;
  204.             break;
  205.  
  206.         default :
  207.             dump("Error capturing menulist changes.\n");
  208.             break;
  209.     }
  210. }
  211.  
  212. // Need to append special folders when account picker is selected.
  213. // Create a set of global special folder vars to be suffixed to the
  214. // server URI of the selected account.
  215. function SetSpecialFolderNamesWithDelims()
  216. {
  217.     var folderDelim = "/";
  218.     /* we use internal names known to everyone like "Sent", "Templates" and "Drafts" */
  219.  
  220.     gFccFolderWithDelim = folderDelim + "Sent";
  221.     gDraftsFolderWithDelim = folderDelim + "Drafts";
  222.     gTemplatesFolderWithDelim = folderDelim + "Templates";
  223. }
  224.  
  225. // Save all changes on this page
  226. function onSave()
  227. {
  228.     onSaveCopiesAndFolders();
  229. }
  230.  
  231. function onSaveCopiesAndFolders()
  232. {
  233.     SaveFolderSettings( gFccRadioElemChoice, 
  234.                         "doFcc",
  235.                         gFccFolderWithDelim, 
  236.                         fccAccountPickerId, 
  237.                         fccFolderPickerId,
  238.                         "identity.fccFolder",
  239.                         "identity.fccFolderPickerMode" );
  240.  
  241.     SaveFolderSettings( gDraftsRadioElemChoice, 
  242.                         "messageDrafts",
  243.                         gDraftsFolderWithDelim, 
  244.                         draftsAccountPickerId, 
  245.                         draftsFolderPickerId,
  246.                         "identity.draftFolder",
  247.                         "identity.draftsFolderPickerMode" );
  248.  
  249.     SaveFolderSettings( gTmplRadioElemChoice,
  250.                         "messageTemplates",
  251.                         gTemplatesFolderWithDelim, 
  252.                         tmplAccountPickerId, 
  253.                         tmplFolderPickerId,
  254.                         "identity.stationeryFolder",
  255.                         "identity.tmplFolderPickerMode" );
  256. }
  257.  
  258. // Save folder settings and radio element choices
  259. function SaveFolderSettings(radioElemChoice, 
  260.                             radioGroupId,
  261.                             folderSuffix,
  262.                             accountPickerId,
  263.                             folderPickerId,
  264.                             folderElementId,
  265.                             folderPickerModeId)
  266. {
  267.     var formElement;
  268.     var uri;
  269.     var picker;
  270.  
  271.     switch (radioElemChoice) 
  272.     {
  273.         case "0" :
  274.             picker = document.getElementById(accountPickerId);
  275.             uri = picker.getAttribute("uri");
  276.             if (uri) {
  277.                 // Create  Folder URI
  278.                 uri = uri + folderSuffix;
  279.  
  280.                 formElement = document.getElementById(folderElementId);
  281.                 formElement.setAttribute("value",uri);
  282.             }
  283.             break;
  284.  
  285.         case "1" : 
  286.             picker = document.getElementById(folderPickerId);
  287.             uri = picker.getAttribute("uri");
  288.             if (uri) {
  289.                 SaveUriFromPicker(folderElementId, folderPickerId);
  290.             }
  291.             break;
  292.  
  293.         default :
  294.             dump ("Error saving folder preferences.\n");
  295.             return;
  296.     }
  297.  
  298.     formElement = document.getElementById(folderPickerModeId);
  299.     formElement.setAttribute("value", radioElemChoice);
  300. }
  301.  
  302. // Get the URI from the picker and save the value into the corresponding pref
  303. function SaveUriFromPicker(fieldName, pickerId)
  304. {
  305.     var picker = document.getElementById(pickerId);
  306.     var uri = picker.getAttribute("uri");
  307.     
  308.     var formElement = document.getElementById(fieldName);
  309.     formElement.setAttribute("value",uri);
  310. }
  311.  
  312. // Check the Fcc Self item and setup associated picker state 
  313. function setupFccItems()
  314.     var broadcaster = document.getElementById("broadcaster_doFcc");
  315.  
  316.     var checked = document.getElementById("identity.doFcc").checked;
  317.     if (checked) {
  318.         broadcaster.removeAttribute("disabled");
  319.         SetupFccPickerState(gFccRadioElemChoice,
  320.                             fccAccountPickerId,
  321.                             fccFolderPickerId);
  322.       }
  323.     else
  324.         broadcaster.setAttribute("disabled", "true");
  325. }
  326.  
  327. // Disable BCC textbox if BCC checkbox is not checked
  328. function setupBccTextbox()
  329. {
  330.     var bccChecked = document.getElementById("identity.doBcc").checked;
  331.     var bccTextbox = document.getElementById("identity.doBccList");
  332.  
  333.     bccTextbox.disabled = !bccChecked;
  334. }
  335.  
  336. // Set up picker settings for Sent Folder 
  337. function SetupFccPickerState(pickerMode, accountPickerId, folderPickerId)
  338. {
  339.     switch (pickerMode) {
  340.         case "0" :
  341.             if (!gFccRadioElemChoiceLocked)
  342.               SetPickerEnabling(accountPickerId, folderPickerId);
  343.             SetRadioButtons("fcc_selectAccount", "fcc_selectFolder");
  344.             break;
  345.     
  346.         case "1" :
  347.             if (!gFccRadioElemChoiceLocked)
  348.               SetPickerEnabling(folderPickerId, accountPickerId);
  349.             SetRadioButtons("fcc_selectFolder", "fcc_selectAccount");
  350.             break;
  351.  
  352.         default :
  353.             dump("Error in setting Fcc elements.\n");
  354.             break;
  355.     }
  356. }
  357.  
  358. // Enable and disable pickers based on the radio element clicked
  359. function SetPickerEnabling(enablePickerId, disablePickerId)
  360. {
  361.     var activePicker = document.getElementById(enablePickerId);
  362.     activePicker.removeAttribute("disabled");
  363.  
  364.     var inactivePicker = document.getElementById(disablePickerId);
  365.     inactivePicker.setAttribute("disabled", "true");
  366. }
  367.  
  368. // Set radio element choices and picker states
  369. function setPickersState(enablePickerId, disablePickerId, event)
  370. {
  371.     SetPickerEnabling(enablePickerId, disablePickerId);
  372.  
  373.     var selectedElementUri;
  374.     var radioElemValue = event.target.value;
  375.  
  376.     var account = getAccountForFolderPickerState();
  377.     if (!account) return;
  378.  
  379.     var server = account.incomingServer;
  380.     var serverId = server.key;
  381.  
  382.     // if special folders are not to be made on the server, 
  383.     // then Local Folders is the home for it's special folders
  384.     if (!server.defaultCopiesAndFoldersPrefsToServer) {
  385.         selectedElementUri = parent.accountManager.localFoldersServer.serverURI;
  386.     }        
  387.     else
  388.         selectedElementUri = serverId;
  389.     
  390.     switch (event.target.id) {
  391.         case "fcc_selectAccount" :
  392.             gFccRadioElemChoice = radioElemValue;   
  393.             break;
  394.         case "draft_selectAccount" :
  395.             gDraftsRadioElemChoice = radioElemValue;   
  396.             break;
  397.         case "tmpl_selectAccount" :
  398.             gTmplRadioElemChoice = radioElemValue;   
  399.             break;
  400.         case "fcc_selectFolder" :
  401.             gFccRadioElemChoice = radioElemValue;   
  402.             selectedElementUri += gFccFolderWithDelim;
  403.             break;
  404.         case "draft_selectFolder" :
  405.             gDraftsRadioElemChoice = radioElemValue;   
  406.             selectedElementUri += gDraftsFolderWithDelim;
  407.             break;
  408.         case "tmpl_selectFolder" :
  409.             gTmplRadioElemChoice = radioElemValue;   
  410.             selectedElementUri += gTemplatesFolderWithDelim;
  411.             break;
  412.         default :
  413.             dump("Error in setting picker state.\n");
  414.             return;
  415.     }
  416.     
  417.     SetFolderPicker(selectedElementUri, enablePickerId);
  418. }
  419.  
  420. // This routine is to restore the correct radio element 
  421. // state when the fcc self checkbox broadcasts the change
  422. function SetRadioButtons(selectPickerId, unselectPickerId)
  423. {
  424.     var activeRadioElem = document.getElementById(selectPickerId);
  425.     activeRadioElem.radioGroup.selectedItem = activeRadioElem;
  426. }
  427.